独自スクリプトも実行できる!モダンでクールな MQTT クライアント「MQTT X」の紹介
はじめに
Mac や Windows から MQTT でブローカーに接続する MQTT クライアントは多くの種類があります。今回は「MQTT X」という Cool な GUI クライアントをご紹介したいと思います。
実は以前 GUI のMQTT クライアントを調べた時に「MQTT X」もインストールしていたのですが、そのときは時間がなくデバイス証明書を利用した接続方法が分からず放置していました。
今回改めて調べてみた所、AWS IoT Core への接続方法だけでなく、面白い機能も見つけたので、その内容をご紹介していきたいと思います。
MQTT X とは
下記の環境をサポートするクロスプラットフォームな MQTT クライアントです。
- Windows
- Mac
- Ubuntu
- Linux
単なるクライアントアプリではなく、様々な認証のサポート、MQTT や WebSocket のサポート、独自スクリプトによるメッセージ処理などユニークな機能を持っている点が特徴です。
インストール
私は Mac を利用しているので、上記のページから dmg ファイルをダウンロードしてインストールします。インストーラの指示に従えばいいので詳細は割愛させていただきます。
AWS IoT Core との接続
AWS IoT Core と接続するために事前にデバイス証明書、秘密鍵、CA証明書をダウンロードしておきます。
では、MQTT X を起動して「New Connection」 をクリックします。
ここで AWS IoT Core との接続情報を入力します。
番号 | 入力箇所 | 入力内容 |
---|---|---|
1 | Name | この接続の名前を入れます。適当なもので構いません。 |
2 | Clinent ID | MQTT 接続時のClient ID です。デフォルトではツールが自動的に生成したものが入ります。 |
3 | Host | 接続する MQTT ブローカーを指定します。ここでは AWS IoT Core のホスト名を設定します。プロトコルは「mqtts」 を選択してください。 |
4 | Port | AWS IoT Core の場合は 8883 を指定してください。 |
5 | SSL/TLS | 暗号化の設定です。true を選択してください。 |
6 | Certificate | self signed を選択してください。 |
7 | SSL Secure | 有効にしてください。 |
8 | CA File | 事前にダウンロードした CA 証明書のパスを指定してください。フォルダアイコンから指定することができます。 |
9 | Client Certificate File | 事前にダウンロードした デバイス証明書のパスを指定してください。 |
10 | Client key file | 事前にダウンロードした 秘密鍵のパスを指定してください。 |
接続設定が終われば、右上の「Connect」 をクリックして接続します。
接続できたら下記のような画面が表示されます。
動作テストとして、AWS IoT Core にメッセージを Publish してみましょう。事前に AWS IoT Core の画面でトピック topic/sample
をSubscribe しておきます。
次に、先程のトピック(topic/sample
) を指定して右下の矢印ボタンをクリックすれば Publish できます。
AWS のコンソールでメッセージを確認することができました。
次に、MQTT X でメッセージを受け取ってみます。画面中央の「New Sbscription」 をクリックします。
先ほどとは別のトピック(topic/sample2
)を指定します。QoS も指定できますが今回はデフォルトの「0」のままとします。なお、AWS IoT Core では 「QoS 2」をサポートしていないので注意しましょう。
それでは、AWS コンソールからPublish してみます。
MQTT X 上でメッセージを受け取ることができました。
メッセージの表示エリアには、「All」「Received」「Published」の3つのボタンがあります。それぞれの内容でメッセージ表示をフィルタリングすることができます。
下記は「Received」で受け取ったメッセージのみ表示しています。
「Published」ならクライアントから送ったメッセージだけ表示できます。
また、同時に他のトピックも設定することができます。
切断するときは上部にある電源ボタンをクリックします。
スクリプト機能
MQTT X の独自機能として、送受信するメッセージ(Payload)に対して独自スクリプトによる変換を行うことができます。
この機能を使うと、例えばランダムデータを生成してセンサーやデバイスの模擬データとしてメッセージを送る、といった事ができます。
ただし、2021年5月現在では下記の点に注意が必要です。
- 対応言語が JavaScript だけであること
- まだベータ提供であること
利用する場合は、下記画像にあるコードを表す「ボタン」をクリックします。
エディタ画面が開くので、「+」をクリックして新規にエディタを開きます。
スクリプトを入力できたら右上の「Save」をクリックして保存します。動作を確認したい場合は「Input」 に期待されるJSONデータをセットして「Test」 ボタンをクリックすると、「Output」 画面で MQTT X から Publish されるメッセージを確認することができます。
最初の保存時にスクリプトの名前を指定することができます。保存したスクリプトはプルダウンから選択して後から編集することもできます。
ランダムデータを5秒間隔で Publish してみる
実際の動作確認として、下記のサンプルスクリプトを試してみます。下記は、毎回ランダムな「温度と湿度」を含んだ JSON データを生成して付与します。
function random(min, max) { return Math.round(Math.random() * (max - min)) + min } function handlePayload(value) { let _value = value if (typeof value == 'string') { _value = JSON.parse(value) } _value.temperature = random(10,30) _value.humidity = random(20,40) return JSON.stringify(_value, null, 2) } execute(handlePayload)
Input データが空({}
)の場合、生成されるデータのフォーマットは下記になります。
{ "temperature": 18, "humidity": 39, }
適当な名前でスクリプトを保存してから、右上のメニューから「Use Script」 を選択します。
次の画面で使いたいスクリプトを選択します。また、どのメッセージにスクリプトの処理を適用したいかを選択します。今回は「Published」を選択します。
スクリプトが設定されると、画面右上の「四角いアイコン」が現れます。
この状態で、Publish するとそのタイミングで1度だけメッセージが送られます。今回は5秒間隔で自動的に送信したいと思います。
その場合は、メニューより「Timed message」 を選択します。
送信間隔を聞かれるので適当な時間を設定します。(今回は「5」秒をセット)
この状態で適当な Input データを設定して Publish ボタンをクリックすると、5秒間隔にランダムな温度・湿度データが送信されるようになります。
送信を開始すると、メッセージ表示エリアに5秒ごとランダムメッセージが Publish されている様子を見ることができます。
AWS IoT Core 側でもデータを受け取っていることを確認できました。
止める場合は、上部の「時計アイコン」をクリックします。
その他の機能
ログ
ログ画面で各種ログを確認することができます。
言語
言語は「英語」、「中国語」、「日本語」に対応していました。(日本語対応に気が付かず英語表示で使っていました)
表示デザインとしてテーマが3種類から選択できます。Light がデフォルトで、他に Dark, Night が選択できます。画像は Dark を選択したものです。
画面に表示されているメッセージはメニューから「Clear History」の選択で一括削除することができます。個別に消したい場合は対象メッセージを右クリックして削除できます。
なお、使用したバージョンは「v1.5.4」です。
最後に
普段、簡単に疎通確認するときはMosquitto
を使うことが多かったですが「MQTT X」はデザインもモダンで使いやすいと感じました。
特にスクリプト機能については「ダミーデータでちょっと動作確認したい」といった場合に便利に使えるのではないかと思います。
他にもMQTT Broker なども公開されているようなので、今後試してみたいと思います。
以上、どなたかのお役に立てれば幸いです。